package com.zcsy.manage.persistence.system;


import java.util.List;
import java.util.Map;

import com.zcsy.manage.model.system.RoleUser;
import com.zcsy.manage.model.system.User;

/**
 * 用户相关查询方法
 * 
 * @author tanghan
 */
public interface UserDao {
	
	/**
	 * 
	* @Title: boundPhone 
	* @Description: 绑定手机 
	* @param phone 手机号
	* @param loginname 登录名
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月15日 
	* @throws
	 */
	int boundPhone(String phone, String loginname);
	/**
	 * 
	* @Title: selectLoginNameByRole 
	* @Description: 角色查询登录名 
	* @param list
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月13日 
	* @throws
	 */
	List<String> selectLoginNameByRole(List<String> list);
	/**
	 * 
	* @Title: selectLoginNameByPhone 
	* @Description: 通过手机号查到登录名 
	* @param phone 手机号
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月12日 
	* @throws
	 */
	String selectLoginNameByPhone(String phone);
	
	/**
	 * 
	* @Title: selectRoleMenu 
	* @Description: 角色查询权限 
	* @param roleid
	* @return 权限ids
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月8日 
	* @throws
	 */
	List<String> selectRoleMenu(String roleid);
	
	/**
	 * 
	* @Title: forgetPass 
	* @Description: 忘记密码 
	* @param pwd 密码
	* @param loginname 登录名
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月8日 
	* @throws
	 */
	int forgetPass(String pwd , String loginname);
	
	/**
	 * 
	* @Title: selectByrole 
	* @Description: 小区id查询角色 
	* @param list
	* @return 角色集合
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月7日 
	* @throws
	 */
	List<Map<String, Object>> selectByrole(List<String> list);
	 
	/**
	 * 
	* @Title: selectByPhone 
	* @Description: 手机号查询用户 
	* @param phone 手机号
	* @return User
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月1日 
	* @throws
	 */
	User selectByPhone(String phone);
	/**
	 * 
	* @Title: changePwd 
	* @Description: 修改密码 
	* @param pwd 密码
	* @param phone 手机号
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年5月31日 
	* @throws
	 */
	int changePwd(User user);
	/**
	 * 
	* @Title: updateInformation 
	* @Description: 修改用户信息 
	* @param user
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年5月31日 
	* @throws
	 */
	int updateInformation(User user);
	 /**
	  * 
	 * @Title: userLogin 
	 * @Description: 用户登录 
	 * @param user 用户对象
	 * @return User
	 * @author wangj 1157360454@qq.com   
	 * @date 2016年5月31日 
	 * @throws
	  */
	User userLogin(User user);
	
    /**
     * 根据ID查询用户信息
     * 
     * @param id
     *            用户主键
     * @return 用户信息
     */
    User selectByPrimaryKey(String id);

    /**
     * 根据ID查询用户信息
     * 
     * @param id
     *            用户登录名
     * @return 用户信息
     */
    User selectByLoginName(String loginname);
    
    /** 
     * @Title: selectUserIfPhoneExists 
     * @Description: 判断用户手机号是否存在
     * @param @param map
     * @param @return     
     * @return List<User>     
     * @throws 
     */
    List<User> selectUserIfPhoneExists(Map map);

    /**
     * 根据主键删除用户信息
     * 
     * @param id
     *            用户主键
     * @return 删除结果
     */
    int deleteByPrimaryKey(String id);

    /**
     * 插入用户信息(字段不为空)
     * 
     * @param record
     *            用户信息
     * @return 插入结果
     */
    int insert(User record);

    /**
     * 插入用户信息(字段可为空)
     * 
     * @param record
     *            用户信息
     * @return 插入结果
     */
    int insertSelective(User record);

    /**
     * 根据关键字更新用户信息(字段可为空)
     * 
     * @param record
     *            用户信息
     * @return 更新结果
     */
    int updateByPrimaryKeySelective(User record);

    /**
     * 获取全部的用户列表
     * 
     * @return
     */
    List<User> getAll();

    /**
     * Description: <br> 查询用户信息
     * 
     * @param record
     *            用户对象
     * @return
     * @see
     */
    List<User> queryUser(User record);
    
    /**
     * 
    * @Title: updateState 
    * @Description: 更新状态 
    * @param map
    * @return 
    * @author wangj 1157360454@qq.com   
    * @date 2016年6月17日 
    * @throws
     */
    int updateState(Map<String, Object> map);

    /**
     * 
    * @Title: selectByRoleId 
    * @Description: 角色id查询用户 
    * @param roleId 角色id
    * @return 
    * @author wangj 1157360454@qq.com   
    * @date 2016年6月17日 
    * @throws
     */
    List<User> selectByRoleId(String roleId);

    /**
     * @Description 根据主键修改用户密码<br>
     * @param map
     *            保存password 密码 id 主键
     * @return 修改的结果
     * @author yangyang yang1192618843@163.com
     * @date 2015年7月20日
     * @see
     */
    int savePassword(Map<String, Object> map);

    /**
     * @Description 根据登录名和手机号鉴别是否存在某用户<br>
     * @param identification
     *            鉴别信息
     * @return 用户对象
     * @author tanhuatang 786468449@qq.com
     * @date 2015年7月23日
     * @see
     */
    User Identify(String identification);
    
    /**
     * @Description 根据部门主键查询用户集合<br>
     * @param orgId
     *            部门主键
     * @return 用户集合
     * @author yuhaichao yhcjhun@foxmail.com
     * @date 2015年7月27日
     */
    List<User> selectByOrgId(String orgId);

    /**
     * @Description 更新角色用户
     * @param roleUser
     * @return 用户角色对象
     * @author xujl 850789178@qq.com
     * @date 2016年1月19日
     * @see
     */
    int insertRoleUser(RoleUser roleUser);

    /**
     * @Description: <br> 清空对应用户的角色
     * 
     * @param roleId
     * @return
     * @see
     */
    int deleteRoleUser(String userId);

    /**
     * @Description: 根据用户Id查询角色列表
     * 
     * @param userId
     *            用户id
     * @return 角色列表
     * @see
     */
    List<RoleUser> queryRoleByUserId(String userId);
    
    /**
     * @Description 根据用户id和用户类型查询角色列表<br>
     * 
     * @param map userId userType
     * @return 
     * @author caiyinli 13277030520@163.com
     * @date 2016年4月21日
     * @see 
     */
    List<RoleUser> queryRoleByUserIdAndUserType(Map map);
    
    /**
     * @Description 根据userId查询角色列表集合<br>
     * 
     * @param userId
     * @return 
     * @author caiyinli 13277030520@163.com
     * @date 2016年5月17日
     * @see 
     */
    List<String> selectByUserId(String userId);
    
    /**
     * @Description 将用户类型为业主（即user_type=5）的积分清零<br>
     * 
     * @author liuying 1075817474@qq.com
     * @date 2016年6月7日
     * @see 
     */
    void clearOwnerIntegral();
    
    /**
     * @Description 获取最新用户编号<br>
     * 
     * @param userType 用户类型 1：运营 2：物业 3：商户 4：配送 5：业主
     * @return 返回最新编号
     * @author caiyinli 13277030520@163.com
     * @date 2016年6月13日
     * @see 
     */
    String getNewUserNo(int userType);
    
    /**
     * @Description 根据用户id取用户的菜单权限<br>
     * 
     * @param userId 用户id
     * @return 
     * @author caiyinli 13277030520@163.com
     * @date 2016年6月17日
     * @see 
     */
    List<String> getMenuListByUserId(String userId);
    
	/**
	 * @Description 获取当前订单在当前小区可选择的派单员信息<br>
	 * 
	 * @param cellId 小区id
	 * @return 返回当前订单在当前小区可选择的派单员信息
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年6月20日
	 * @see 
	 */
	List<User> selectByCellId(String cellId);
	
	
	
	//业主接口
	
	/**
	 * @Description 根据登陆账号或手机号和用户类型查询用户<br>
	 * 
	 * @param user 用户对象
	 * @return 用户对象
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年6月23日
	 * @see 
	 */
	User ownerUserLogin(User user);
	
	/**
	 * @Method: shopKeeperLogin
	 * @Description 根据登陆账号或手机号查询商户
	 * @param loginName
	 * @return 
	 * @author liuziyu liuziyuwri@foxmail.com
	 * @date 2016年7月18日
	 * @see 
	 */
	User shopKeeperLogin(String loginName);
	
	 /**
     * @Description 根据订单id查询所对应的店铺帐号<br>
     * 
     * @param orderId 订单id
     * @return 
     * @author yangfan 373188993@qq.com
     * @date 2016年8月22日
     * @see 
     */
	List<String> selectShopUserAccountByOrderId(String id);
	
	/**
	 * @Description:根据手机号和用户类型查询用户，用于注册时判断当前手机号是否已被注册
	 * @param map  phone 注册手机号
	 *             userType 用户类型
	 * @return 
	 * @author huangls 1449700087@qq.com
	 * @date 2016年9月13日
	 */
	User  selectUserByPhoneAndUserType(Map map);

	/**
	 * @Description 查询多个运营公司id是否被用户引用
	 * @param companyIds 多个公司id
	 * @param userType 用户类型
	 * @return 被引用的数目
	 * @author liuying 1075817474@qq.com
	 * @date 2016年9月19日
	 * @see 
	 */
	Integer selectCountByCompanyId(String[] companyIds, int userType);

	/**
	 * @Description 更新登录时间和登录次数
	 * @param user 当前用户
	 * @return 1:成功，0：失败
	 * @author liuying 1075817474@qq.com
	 * @date 2016年9月21日
	 * @see 
	 */
	Integer updateLoginTimeAndTimes(User user);
}
